package com.fy.fyai.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * JSON解析工具类
 * 用于解析AI返回的特定格式JSON
 */
@Slf4j
public class JsonParserUtil {

    /**
     * 解析AI返回的JSON格式
     * 格式：{ "functionName": "xxx", "userInfo": { "userName": "xxx", ... } }
     * 
     * @param jsonString AI返回的JSON字符串
     * @return Object[] 数组，[0]为functionName(String)，[1]为userInfo(Map<String, Object>)
     */
    public static Object[] parseJson(String jsonString) {
        String functionName = "";
        Map<String, Object> userInfo = new HashMap<>();
        
        try {
            if (jsonString == null || jsonString.trim().isEmpty()) {
                return new Object[]{functionName, userInfo};
            }
            
            // 预处理：去除markdown代码块格式
            String cleanJson = preprocessJsonString(jsonString);
            
            // 使用FastJSON解析
            JSONObject jsonObject = JSON.parseObject(cleanJson);
            
            // 提取functionName
            if (jsonObject.containsKey("functionName")) {
                functionName = jsonObject.getString("functionName");
                if (functionName == null) {
                    functionName = "";
                }
            }
            
            // 提取userInfo
            if (jsonObject.containsKey("userInfo")) {
                JSONObject userInfoObj = jsonObject.getJSONObject("userInfo");
                if (userInfoObj != null) {
                    // 遍历所有字段
                    String[] fields = {"userName", "userPhone", "roomId", "roomType", 
                                     "checkInDate", "checkOutDate", "guestCount", "bookingId", "price"};
                    
                    for (String field : fields) {
                        Object value = userInfoObj.get(field);
                        if (value != null && !"null".equals(value.toString())) {
                            // 处理数字类型字段
                            if ("roomId".equals(field) || "bookingId".equals(field) || "guestCount".equals(field)) {
                                try {
                                    if (value instanceof String) {
                                        value = Long.parseLong((String) value);
                                    }
                                } catch (NumberFormatException e) {
                                    // 如果转换失败，保持原值
                                }
                            }
                            userInfo.put(field, value);
                        }
                    }
                }
            }
            
        } catch (Exception e) {
            log.error("解析AI返回的JSON失败: {}", e.getMessage());
            log.error("原始JSON字符串: {}", jsonString);
            // 返回默认值
            functionName = "";
            userInfo.clear();
        }
        
        return new Object[]{functionName, userInfo};
    }
    
    /**
     * 预处理JSON字符串，去除markdown代码块格式
     * 
     * @param jsonString 原始JSON字符串
     * @return 清理后的JSON字符串
     */
    private static String preprocessJsonString(String jsonString) {
        if (jsonString == null) {
            return "";
        }
        
        String result = jsonString.trim();
        
        // 去除开头的```json或```标记
        if (result.startsWith("```json")) {
            result = result.substring(7);
        } else if (result.startsWith("```")) {
            result = result.substring(3);
        }
        
        // 去除结尾的```标记
        if (result.endsWith("```")) {
            result = result.substring(0, result.length() - 3);
        }
        
        return result.trim();
    }
}
